const express=require('express');
const path = require('path');
const pug=require('pug');
const app = express();
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const PagerHelper = require('./PagerHelper');
const session = require("express-session");
const pager=PagerHelper.pagerHelper;
// const dao=require('../model/stuDao');
let loginRouter = require('./routers/LoginRoute');
let stuRouter = require('./routers/StuRoute');
//设置页面文件夹
app.set('views', path.join(__dirname,'views'));
//设置引擎
app.set('view engine','pug');
//静态资源
app.use(express.static("public"));
//中间件 解析url相关函数
app.use(bodyParser.urlencoded({extended:true}));
app.use(cookieParser("stuM"));

app.use(session({
    // id: Mock.Random.guid(),
    secret: 'stu_app',   // 可以随便写。 一个 String 类型的字符串，作为服务器端生成 session 的签名
    name: 'session_id',/*保存在本地cookie的一个名字 默认connect.sid  可以不设置*/
    resave: false,   /*强制保存 session 即使它并没有变化,。默认为 true。建议设置成 false。*/
    saveUninitialized: true,   //强制将未初始化的 session 存储。  默认值是true  建议设置成true
    cookie: {
        maxAge: 60 * 1000 * 30   /*过期时间30分钟*/
    },   /*secure https这样的情况才可以访问cookie*/
    //设置过期时间比如是30分钟，只要游览页面，30分钟没有操作的话在过期
    rolling: true //在每次请求时强行设置 cookie，这将重置 cookie 过期时间（默认：false）
}));

//中间件必须在路由之前,先是req,再是res
app.use((req,res,next)=>{
      //解构赋值不存在会不会赋为空
      let {pageNum,pageSize}=req.query;
      if(pageNum) {
          pager.pageNum=parseInt(pageNum);
      }
      if(pageSize) pager.pageSize=parseInt(pageSize);
      next();
});
//登陆拦截
app.all("/*",(req,res,next)=>{
    if(req.session.loginBean){
        next();
    }
    else{
        let whiteUrls=["/login.html","/login.do"];
        if(whiteUrls.some(value => req.url.trim().toLowerCase().endsWith(value.toLowerCase()))){
            next();
        }else{
            req.session.originalUrl = req.originalUrl ? req.originalUrl : null;  // 记录用户原始请求路径
            res.redirect('/login.html');  // 将用户重定向到登录页面
        }
    }
})
app.use('/',loginRouter);
app.use('/',stuRouter);

//错误捕获，只能捕获同步函数触发的错误，不能捕获异步错误
app.use((err,req,res,next)=>{
    res.locals.message = err.message;
    res.locals.error =req.app.get('env')==='developemnt'? err:{};

    res.status(err.status || 500);
    res.render('error');
    console.log(err);
})

  app.get("/abcM.html",(req,res)=>{
    res.render("abcM",{
        title:"缺勤管理页面",
        username:"韦德",
        stubaclist:stuabclist
});
});
app.listen(8080,()=>{
    console.log("服务器启动成功");
})